﻿using System.Globalization;
using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.Data;
using System.Collections.Generic;
using System.Reflection;
using System.Linq;
using System.Linq.Expressions;
using System.ComponentModel;
using System;


namespace PlanoAulaHelper.Reports
{

    
    public partial class Relatorios
    {
        partial class RelatorioPlanoAulaDataTable
        {
        }
        public static DataTable ObterAvaliacoes(int IdPlanoAulaCab)
        {
            using (dbContext db = new dbContext())
            {
                int qtdDetalhe = db.UnidadeAvaliacaos.Count(unidades => unidades.IdPlanoAulaCab == IdPlanoAulaCab);
                if (qtdDetalhe == 0)
                    return new DataTable();
                var resultado = (from avaliacoes in db.Avaliacaos
                                 where avaliacoes.UnidadeAvaliacao.IdPlanoAulaCab == IdPlanoAulaCab
                                 orderby avaliacoes.UnidadeAvaliacao.Nome ascending, avaliacoes.DataMarcada ascending
                                 select new { Avaliacao = avaliacoes.Nome, avaliacoes.UnidadeAvaliacao.IdPlanoAulaCab, Data = avaliacoes.DataMarcada, Unidade = avaliacoes.UnidadeAvaliacao.Nome });
                return resultado.ToADOTable();
            }
        }
        public static DataTable ObterRelatorioAvaliacao(int IdPlanoAulaCab)
        {
            using (dbContext db = new dbContext())
            {
                int qtdDetalhe = db.PlanoAulaDetalhes.Count(n => n.IdPlanoAulaCab == IdPlanoAulaCab);
                if ( qtdDetalhe == 0 )
                    return new DataTable();
                var resultado = (from pcab in db.PlanoAulaCabs
                                 join pdet in db.PlanoAulaDetalhes on pcab.Id equals pdet.IdPlanoAulaCab into joinPlanoAula
                                 where pcab.Id == IdPlanoAulaCab
                                 from jPlanoAula in joinPlanoAula.DefaultIfEmpty()
                                 orderby jPlanoAula.Data ascending, jPlanoAula.HoraInicio, jPlanoAula.MinutoInicio, jPlanoAula.HoraFinal, jPlanoAula.MinutoFinal
                                 select new
                                 {
                                     IdPlanoAulaCab = (int?)jPlanoAula.IdPlanoAulaCab,
                                     IdPlanoAulaDetalhe = (int?)jPlanoAula.Id,
                                     EhProva = (from prova in db.Avaliacaos where prova.UnidadeAvaliacao.IdPlanoAulaCab == jPlanoAula.IdPlanoAulaCab && prova.DataMarcada.GetValueOrDefault(new DateTime(1901,01,01)).Date == jPlanoAula.Data.Date select prova).Count() != 0,
                                     jPlanoAula.Conteudo,
                                     jPlanoAula.Referencia,
                                     Data = (DateTime?)jPlanoAula.Data,
                                     Dia = (int?)(((DayOfWeek?)jPlanoAula.Data.DayOfWeek).HasValue? (int?)jPlanoAula.Data.DayOfWeek : (int?) null),
                                     HoraInicio = (int?)jPlanoAula.HoraInicio,
                                     HoraFinal = (int?)jPlanoAula.HoraFinal,
                                     MinutoInicio = (int?)jPlanoAula.MinutoInicio,
                                     MinutoFinal = (int?)jPlanoAula.MinutoFinal
                                 });

                return resultado.ToADOTable();
            }
        }

        //public static DataTable ObterDadosRelatorioAvaliacao(int IdItem)
        //{
        //    var relatorio = (from r in new RelatoriosDataContext().RelatorioAvaliacaoDados
        //                     where r.IdPlanoAulaCab == IdItem
        //                     orderby r.DataMarcada ascending, r.NomeAvaliacao ascending
        //                     select r);
        //    return relatorio.ToADOTable(rec => new object[] { relatorio });
        //}
    }
}
